<?php

namespace app\games\controller;

use think\Controller;
use think\Request;

class Games extends Controller
{
    protected $GamesModel = null;
    protected $UserModel = null;

    public function _initialize()
    {
        parent::_initialize();
        $this->GamesModel = model('common/Games/Games');
        $this->UserModel = model('common/Games/Gameuser');
    }

    // 获取游戏列表
    public function getgameslist()
    {
        if ($this->request->isPost()) {
            // 接收传过来的数据
            $param = $this->request->param();

            // 分页
            $page = $param['page'] ?? 1;
            $limit = $param['limit'] ?? 10;

            $where = [];

            // 看是否有关键字，有的话加入查询条件
            if ($param['search']) {
                $where['gamename'] = ['LIKE', "%{$param['search']}%"];
            }

            $count = $this->GamesModel->where($where)->count();
            $item = $this->GamesModel->where($where)->page($page, $limit)->select();

            // 隐藏item里面的下载地址address
            foreach ($item as $key => $value) {
                if ($item[$key]['address']) {
                    $item[$key]['address'] = '****';
                    $item[$key]['address_text'] = '****';
                }
            }

            $data = [
                'cont' => $count,
                'item' => $item
            ];

            if ($item) {
                $this->success('查询成功', '', $data);
            } else {
                $this->error($this->GamesModel->getError());
            }
        }
    }

    // 获取游戏详情
    public function getgameinfo()
    {
        if ($this->request->isPost()) {
            $params = $this->request->param();
            $id = $params['id'];

            if (empty($id)) {
                $this->error('参数错误');
            }

            $gameinfo = $this->GamesModel->find($id);

            if ($gameinfo) {
                $this->success('查询成功', '', $gameinfo);
            } else {
                $this->error('查询失败' . $this->GamesModel->getError());
            }
        }
    }

//   public function download()
// {
//     if ($this->request->isPost()) {
//         $id = $this->request->param('id', 0, '');
//         $userid = $this->request->param('busid', 0, '');
//         $usernumber = $this->request->param('usernumber','', '');

//         $userinfo = $this->UserModel->where(['id'=>$userid,'usernumber'=>$usernumber])->find();
//         if (!$userinfo) {
//             $this->error('用户不存在');
//         }

//         // 检查会员状态
//         if ($userinfo['vipendtime'] < time()) {
//             $this->error('暂无会员信息');
//         }
        
//         // 获取游戏信息
//         $game = $this->GamesModel->find($id);
//         if (!$game || empty($game['address'])) {
//             return $this->error('游戏或下载地址不存在');
//         }
        
//         // 处理文件路径
//         $dbAddress = $game['address'];
//         $trimmedPath = ltrim($dbAddress, '/\\');
//         $systemPath = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, $trimmedPath);
//         $filePath = ROOT_PATH . 'public' . DIRECTORY_SEPARATOR . $systemPath;

//         // 检查文件是否存在且可读
//         if (!file_exists($filePath) || !is_file($filePath)) {
//             return $this->error('文件不存在或不是有效的文件');
//         }
//         if (!is_readable($filePath)) {
//             return $this->error('没有文件读取权限');
//         }

//         // 清除输出缓冲区
//         while (ob_get_level() > 0) {
//             ob_end_clean();
//         }

//         $fileName = basename($filePath);
//         $fileSize = filesize($filePath);
        
//         // 处理断点续传
//         $range = '';
//         $start = 0;
//         $end = $fileSize - 1;
        
//         // 检查是否有Range请求头
//         if (isset($_SERVER['HTTP_RANGE'])) {
//             if (preg_match('/bytes=(\d*)-(\d*)/', $_SERVER['HTTP_RANGE'], $matches)) {
//                 $start = intval($matches[1]);
//                 if (!empty($matches[2])) {
//                     $end = intval($matches[2]);
//                 }
                
//                 // 验证范围有效性
//                 if ($start > $end || $start >= $fileSize) {
//                     http_response_code(416); // 请求的范围不符合要求
//                     header("Content-Range: bytes */$fileSize");
//                     exit;
//                 }
                
//                 http_response_code(206); // 部分内容
//                 header("Content-Range: bytes $start-$end/$fileSize");
//             }
//         } else {
//             http_response_code(200); // 完整内容
//             header("Content-Length: $fileSize");
//         }

//         // 通用下载响应头
//         header('Content-Description: File Transfer');
//         header('Content-Type: application/octet-stream');
//         header('Content-Disposition: attachment; filename="' . rawurlencode($fileName) . '"');
//         header('Accept-Ranges: bytes'); // 告知客户端支持断点续传
//         header('Expires: 0');
//         header('Cache-Control: must-revalidate');
//         header('Pragma: public');
        
//         // 计算需要传输的字节数
//         $length = $end - $start + 1;
//         header("Content-Length: $length");

//         // 从指定位置开始读取文件并输出
//         $handle = fopen($filePath, 'rb');
//         if ($handle) {
//             // 移动到起始位置
//             fseek($handle, $start);
            
//             // 分段读取文件
//             $bufferSize = 1024 * 8;
//             while ($length > 0 && !feof($handle)) {
//                 $read = min($bufferSize, $length);
//                 echo fread($handle, $read);
//                 flush();
//                 $length -= $read;
//             }
//             fclose($handle);
//         }
//         exit;
//     }
// }
}
